﻿using System;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Web;
using System.Xml;
using System.Text;
using System.IO;
using System.Data;
using System.Configuration;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for EstructuracionCtrl
/// </summary>
public class EstructuracionCtrl
{
    private EstructuracionBD bdEstructuracion = new EstructuracionBD();
    private ProyectosCtrl ctrlProyectos = new ProyectosCtrl();
    private TareasCtrl ctrlTareas =  new TareasCtrl();
    private EntregablesCtrl ctrlEntregables = new EntregablesCtrl();
    private EmpleadosCtrl ctrlEmpleados = new EmpleadosCtrl();


    private static EstructuracionEnt entEstructuracion;
    private static IteracionEnt entIteracion;
    private static ActividadesEnt entActividades;
    private static EntregablesEnt entEntregables;
    private static TareasEnt entTareas;
    private static EmpleadosEnt entEmpleados;
    private static ProyectoEnt entProyectos;

    private static List<EstructuracionEnt> listEstructuraciones = new List <EstructuracionEnt>();
    private static List<IteracionEnt> listIteraciones = new List<IteracionEnt>();
    private static List<ActividadesEnt> listActividades = new List<ActividadesEnt>();
    private static List<EntregablesEnt> listEntregables = new List<EntregablesEnt>();
    private static List<TareasEnt> listTareas = new List<TareasEnt>();
    private static List<EmpleadosEnt> listEmpleados = new List<EmpleadosEnt>();

    private static string rutaArchivo = "";

    private static XmlDocument xml = new XmlDocument();


    public EstructuracionCtrl()
	{
	}

    public List<IteracionEnt> ObtenerListaIteraciones()
    {
        return listIteraciones;
    }

    public List<ActividadesEnt> ObtenerListaActividades()
    {
        return bdEstructuracion.RecuperarActividades();
    }


    public List<EntregablesEnt> ObtenerListaEntregables()
    {
        return ctrlEntregables.RecuperarEntregables();
    }


    public List<TareasEnt> ObtenerListaTareas()
    {
        return ctrlTareas.RecuperarTareas();
    }


    public List<EmpleadosEnt> ObtenerListaEmpleados()
    {
        return ctrlEmpleados.ObtenerEmpleados();
    }
   
    public void RecuperarIteraciones()
    {
        listIteraciones = bdEstructuracion.RecuperarIteraciones();
    }


    public void RecuperarActividades()
    {
        listActividades = bdEstructuracion.RecuperarActividades();
    }


    public void RecuperarTareas()
    {
        listTareas = ctrlTareas.RecuperarTareas();
    }


    public void RecuperarEntregables()
    {
        listEntregables = ctrlEntregables.RecuperarEntregables();
    }


    public void RecuperarEmpleados()
    {
        listEmpleados = ctrlEmpleados.ObtenerEmpleados();
    }


    private void AgregarEstadoIteraciones()
    {

        XmlNode proyecto = xml.DocumentElement;
        bool pendiente = false;
        XmlNode tempAnt = proyecto.FirstChild;//iteraciones
        XmlNode temp;// actividades

        //Si hay una iteración
        if (tempAnt != null)
        {
            //Ciclo externo recorre todas las iteraciones
            for (int i = 0; i < proyecto.ChildNodes.Count; i++)
            {
                //Obtener actividad de la iteración y colocar la bandera pendiente en falso
                temp = tempAnt.FirstChild;//actividades
                pendiente = false;

                //Ciclo interno recorre todas las actividades
                for (int j = 0; !pendiente && j < tempAnt.ChildNodes.Count; j++)
                {
                    //Si alguna actividad NO está finalizada, pasar a pendiente TRUE la bandera pendiente de la iter
                    if (temp.Attributes["Estado"].Value != "Finalizado")
                        pendiente = true;

                    //Tomar la siguiente actividad
                    temp = temp.NextSibling;
                }

                //Si el pendiente se mantiene falso la iteración está finalizada 
                if (pendiente == false)
                    tempAnt.Attributes["Estado"].Value = "Finalizado";
                else
                    tempAnt.Attributes["Estado"].Value = "Pendiente";

                //Tomar la siguiente iteración
                tempAnt = tempAnt.NextSibling;
            }
        }

        xml.Save(rutaArchivo);
    }
    
    public string CrearXML()
    {
        rutaArchivo = Directory.GetCurrentDirectory() + "\\prueba.xml";
        XmlTextWriter writer = new XmlTextWriter(rutaArchivo, null);

        writer.WriteStartElement("Proyecto");
        writer.WriteEndElement();
        writer.Close();
        return rutaArchivo;
    }

    public string CrearXML(int proyecto)
    {
        bdEstructuracion.EliminarIteracionesTemporales();//Borra las iteraciones basura
        ProyectoConsultado(proyecto);

        rutaArchivo = Directory.GetCurrentDirectory() + "\\prueba.xml";
        XmlTextWriter writer = new XmlTextWriter(rutaArchivo, null);

        List<IteracionEnt> tempIteraciones = null;//obtengo ids y nombres
        List<ActividadesEnt> tempActividades = null;//este tenog q ir  cambiando dentro del for pidiendo mis actividades segun la iteracion que soy
        List<EntregablesEnt> tempEntregables = null;//igual q el otro pero con entregables y tareas
        List<TareasEnt> tempTareas = null;//lo mismo q arriba excepto q es con tareas y entregables
        EmpleadosEnt tempEmpleado = null; //los entregables solo tienen un empleado va cambiando en el for

        string nombre;
        string id;
        string estado;
        string fechaAsignacion;

        string fechaLimite;

        int numIteraciones;
        int numActividades;
        int numTareas;
        int numEntregables;

        nombre = entProyectos.Nombre;
        id = (entProyectos.Id).ToString();
        estado = entProyectos.Estado;
        numIteraciones = bdEstructuracion.NumHijosProyecto(entProyectos.Id);
        tempIteraciones = bdEstructuracion.RecuperarIteraciones(entProyectos.Id);

        writer.WriteStartElement("Proyecto");
        writer.WriteAttributeString("Nombre", nombre);
        writer.WriteAttributeString("Id", id);
        writer.WriteAttributeString("Estado", estado);

        for (int indIter = 0; indIter < numIteraciones; indIter++)
        {
            nombre = tempIteraciones[indIter].NombreIter;
            id = (tempIteraciones[indIter].Id).ToString();
            numActividades = bdEstructuracion.NumHijosIteracion(entProyectos.Id, tempIteraciones[indIter].Id);
            tempActividades = bdEstructuracion.RecuperarActividades(entProyectos.Id, tempIteraciones[indIter].Id);

            writer.WriteStartElement("Iteracion");
            writer.WriteAttributeString("Nombre", nombre);
            writer.WriteAttributeString("Id", id);
            writer.WriteAttributeString("Temporal", "0");
            writer.WriteAttributeString("Estado", "Pendiente");

            for (int indActiv = 0; indActiv < numActividades; indActiv++)
            {
                nombre = tempActividades[indActiv].Nombre;

                id = (tempActividades[indActiv].Id).ToString();
                numTareas = bdEstructuracion.NumHijosActividad(entProyectos.Id, tempIteraciones[indIter].Id, tempActividades[indActiv].Id);
                tempTareas = bdEstructuracion.RecuperarTareas(entProyectos.Id, tempIteraciones[indIter].Id, tempActividades[indActiv].Id);
                estado = "Finalizado";

                int miniIter = 0;
                while (miniIter < tempTareas.Count && tempTareas[miniIter].Estado == "Finalizado")
                    miniIter++;

                if (miniIter < tempTareas.Count && tempTareas[miniIter].Estado != "Finalizado")
                    estado = "Pendiente";

                writer.WriteStartElement("Actividad");
                writer.WriteAttributeString("Nombre", nombre);
                writer.WriteAttributeString("Id", id);
                writer.WriteAttributeString("Temporal", "0");
                writer.WriteAttributeString("Estado", estado);

                for (int indTareas = 0; indTareas < numTareas; indTareas++)
                {
                    nombre = tempTareas[indTareas].Nombre;

                    id = (tempTareas[indTareas].Id).ToString();
                    estado = tempTareas[indTareas].Estado;
                    fechaAsignacion = (tempTareas[indTareas].FechaAsignacion).ToString();

                    fechaLimite = (tempTareas[indTareas].FechaLimite).ToString();
                    numEntregables = bdEstructuracion.NumHijosTarea(entProyectos.Id, tempIteraciones[indIter].Id, tempActividades[indActiv].Id, tempTareas[indTareas].Id);
                    tempEntregables = bdEstructuracion.RecuperarEntregables(entProyectos.Id, tempIteraciones[indIter].Id, tempActividades[indActiv].Id, tempTareas[indTareas].Id);

                    writer.WriteStartElement("Tarea");
                    writer.WriteAttributeString("Nombre", nombre);
                    writer.WriteAttributeString("Id", id);
                    writer.WriteAttributeString("Temporal", "0");
                    writer.WriteAttributeString("Estado", estado);
                    writer.WriteAttributeString("Fecha_Asignacion", fechaAsignacion);
                    writer.WriteAttributeString("Fecha_Limite", fechaLimite);


                    for (int indEntr = 0; indEntr < numEntregables; indEntr++)
                    {
                        nombre = tempEntregables[indEntr].Nombre;

                        id = (tempEntregables[indEntr].Id).ToString();
                        estado = tempEntregables[indEntr].Estado;
                        fechaAsignacion = (tempEntregables[indEntr].FechaAsignacion).ToString();

                        fechaLimite = (tempEntregables[indEntr].FechaLimite).ToString();

                        writer.WriteStartElement("Entregable");
                        writer.WriteAttributeString("Nombre", nombre);
                        writer.WriteAttributeString("Id", id);
                        writer.WriteAttributeString("Temporal", "0");
                        writer.WriteAttributeString("Estado", estado);
                        writer.WriteAttributeString("Fecha_Asignacion", fechaAsignacion);
                        writer.WriteAttributeString("Fecha_Limite", fechaLimite);



                        tempEmpleado = bdEstructuracion.RecuperarEmpleado(entProyectos.Id, tempIteraciones[indIter].Id, tempActividades[indActiv].Id, tempTareas[indTareas].Id, tempEntregables[indEntr].Id);
                        nombre = tempEmpleado.Nombre;
                        id = (tempEmpleado.Cedula).ToString();

                        writer.WriteStartElement("Empleado");
                        writer.WriteAttributeString("Nombre", nombre);
                        writer.WriteAttributeString("Id", id);
                        writer.WriteAttributeString("Temporal", "0");
                        writer.WriteEndElement();
                        writer.WriteEndElement();
                    }
                    writer.WriteEndElement();
                }
                writer.WriteEndElement();
            }
            writer.WriteEndElement();
        }
        writer.WriteEndElement();
        writer.Close();

        xml.Load(rutaArchivo);

        AgregarEstadoIteraciones();

        return rutaArchivo;
    }


    //agregar empleado a entregable
    public string ModificarXML(string nombre, string idProyecto, string idIteracion, string idActividad,
                                string idTarea, string idEntregable, string idEmpleado)
    {

        string fechaAsig = DateTime.Today.ToString();
        string estado = "";

        XmlNode proyecto = xml.DocumentElement;
        XmlElement nuevo = xml.CreateElement("Empleado");

        nuevo.SetAttribute("Nombre", nombre);
        nuevo.SetAttribute("Id", idEmpleado);
        nuevo.SetAttribute("Estado", "Pendiente");
        nuevo.SetAttribute("Temporal", "0");

        proyecto.Attributes["Estado"].Value = "Pendiente";

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                temp.Attributes["Estado"].Value = "Pendiente";
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        temp.Attributes["Estado"].Value = "Pendiente";
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                temp.Attributes["Estado"].Value = "Pendiente";
                                tempAnt = temp;
                                temp = temp.FirstChild;//paso a los hijos tareas(entregables)
                                for (int m = 0; m < tempAnt.ChildNodes.Count && !encontrado; m++)
                                {
                                    if (temp.Attributes["Id"].Value.Equals(idEntregable))
                                    {
                                        estado = temp.Attributes["Estado"].Value;
                                        temp.Attributes["Temporal"].Value = "0";
                                        temp.Attributes["Estado"].Value = "Pendiente";
                                        encontrado = true;
                                        temp.AppendChild(nuevo);//agrego al empleado
                                    }
                                    else
                                    {
                                        temp = temp.NextSibling;//sgte entregable
                                    }
                                }
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);

        //llamar al metodo que guarda una tupla de estructuracion2
        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion), Convert.ToInt32(idActividad),
            Convert.ToInt32(idTarea), Convert.ToInt32(idEntregable), Convert.ToInt32(idEmpleado), Convert.ToDateTime(fechaAsig), estado);
        bdEstructuracion.InsertarEstructuracion2(est);
        return rutaArchivo;
    }

    //Agrega entregables a tareas 
    public string ModificarXML(string nombre, string idProyecto, string idIteracion, string idActividad,
                               string idTarea, string idEntregable)
    {

        XmlNode proyecto = xml.DocumentElement;
        XmlElement nuevo = xml.CreateElement("Entregable");

        string fechaAsig = DateTime.Today.ToString();
        string estado = "Pendiente";

        nuevo.SetAttribute("Nombre", nombre);
        nuevo.SetAttribute("Id", idEntregable);
        nuevo.SetAttribute("Temporal", "1");
        nuevo.SetAttribute("Estado", estado);
        nuevo.SetAttribute("Fecha_Asignacion", fechaAsig);
        nuevo.SetAttribute("Fecha_Final", "");

        proyecto.Attributes["Estado"].Value = "Pendiente";

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                temp.Attributes["Estado"].Value = "Pendiente";
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        temp.Attributes["Estado"].Value = "Pendiente";
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                temp.Attributes["Estado"].Value = "Pendiente";
                                encontrado = true;
                                temp.AppendChild(nuevo);
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);
        AgregarEstadoIteraciones();
        AgregarEstadoIteraciones();

        return rutaArchivo;
    }

    //Agregar tareas a actividades 
    public string ModificarXML(string nombre, string idProyecto, string idIteracion, string idActividad, string idTarea)
    {

        XmlNode proyecto = xml.DocumentElement;
        XmlElement nuevo = xml.CreateElement("Tarea");

        string fechaAsig = DateTime.Today.ToString();
        string estado = "Pendiente";

        nuevo.SetAttribute("Nombre", nombre);
        nuevo.SetAttribute("Id", idTarea);

        nuevo.SetAttribute("Temporal", "0");
        nuevo.SetAttribute("Estado", estado);
        nuevo.SetAttribute("Fecha_Asignacion", fechaAsig);
        nuevo.SetAttribute("Fecha_Final", "");

        proyecto.Attributes["Estado"].Value = "Pendiente";

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                temp.Attributes["Temporal"].Value = "0";
                temp.Attributes["Estado"].Value = "Pendiente";
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        temp.Attributes["Temporal"].Value = "0";
                        temp.Attributes["Estado"].Value = "Pendiente";
                        encontrado = true;
                        temp.AppendChild(nuevo);

                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        //llamar metodo que guarda una tupla en estructuracion1
        //llamar metodo que guarda una tupla en estructuracion1
        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion), Convert.ToInt32(idActividad),
            Convert.ToInt32(idTarea), Convert.ToDateTime(fechaAsig), estado);
        bdEstructuracion.InsertarEstructuracion1(est);
        xml.Save(rutaArchivo);

        AgregarEstadoIteraciones();

        return rutaArchivo;
    }

    //agregar actvidades a iteraciones
    public string ModificarXML(string nombre, string idProyecto, string idIteracion, string idActividad)
    {



        XmlNode proyecto = xml.DocumentElement;
        XmlElement nuevo = xml.CreateElement("Actividad");


        nuevo.SetAttribute("Nombre", nombre);
        nuevo.SetAttribute("Id", idActividad);
        nuevo.SetAttribute("Estado", "Pendiente");
        nuevo.SetAttribute("Temporal", "1");


        proyecto.Attributes["Estado"].Value = "Pendiente";
        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;


        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                temp.Attributes["Estado"].Value = "Pendiente";
                encontrado = true;
                temp.AppendChild(nuevo);
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);
        AgregarEstadoIteraciones();

        return rutaArchivo;
    }

    //Agregar iteraciones a proyecto METER LAS ITERACIONES si cancela borrarlas
    public string ModificarXML(string nombre, string idProyecto)
    {

        XmlNode proyecto = xml.DocumentElement;
        XmlElement nuevo = xml.CreateElement("Iteracion");


        int idIt = bdEstructuracion.InsertarIteracion(new IteracionEnt(0, nombre));
        string idIteracion = idIt.ToString();

        nuevo.SetAttribute("Nombre", nombre);
        nuevo.SetAttribute("Id", idIteracion);
        nuevo.SetAttribute("NumHijos", "0");
        nuevo.SetAttribute("Temporal", "1");
        nuevo.SetAttribute("Estado", "Pendiente");

        proyecto.Attributes["Estado"].Value = "Pendiente";
        proyecto.AppendChild(nuevo);

        xml.Save(rutaArchivo);
        AgregarEstadoIteraciones();

        return rutaArchivo;
    }
	
	
	public DataTable ObtenerEstados()
    {
        return this.ctrlProyectos.ObtenerEstados();
    }


    public List<ProyectoEnt> CargarProyectos()
    {
        return ctrlProyectos.CargarProyectos();
    }

    public List<ProyectoEnt> CargarProyectos(int cedula)
    {
        return ctrlProyectos.CargarProyectos(cedula);
    }


    public void ProyectoConsultado(int id)
    {
        entProyectos = ctrlProyectos.ConsultarProyecto(id);
    }


    public List<IteracionEnt> ConsultarIteraciones(int id)
    {
        return bdEstructuracion.ConsultarIteraciones(id);
    }


    public string getRuta()
    {
        return rutaArchivo;
    }
	
	//----------------------MODIFICAR---------------------------------------------------------------------------

    //Modificar empleados
    public void EditarXMLEmp(string idProyecto, string idIteracion, string idActividad,
                               string idTarea, string idEntregable, string idEmpleadoNuevo, string nombre, string fecha)
    {
        XmlNode proyecto = xml.DocumentElement;


        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                tempAnt = temp;
                                temp = temp.FirstChild;//paso a los hijos tareas(entregables)
                                for (int m = 0; m < tempAnt.ChildNodes.Count && !encontrado; m++)
                                {
                                    if (temp.Attributes["Id"].Value.Equals(idEntregable))
                                    {
                                        tempAnt = temp;
                                        temp = temp.FirstChild;
                                        temp.Attributes["Id"].Value = idEmpleadoNuevo;
                                        temp.Attributes["Nombre"].Value = nombre;
                                        encontrado = true;

                                    }
                                    else
                                    {
                                        temp = temp.NextSibling;//sgte entregable
                                    }
                                }

                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion), Convert.ToInt32(idActividad),
            Convert.ToInt32(idTarea), Convert.ToInt32(idEntregable), Convert.ToInt32(idEmpleadoNuevo), Convert.ToDateTime(fecha));
        bdEstructuracion.ActualizarEmpleados(est);

        xml.Save(rutaArchivo);

    }

    //Modifica entregable
    public void EditarXML(string idProyecto, string idIteracion, string idActividad, string idTarea,
                            string idEntregableViejo, string idEntregableNuevo, string nombre,string fecha)
    {

        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                tempAnt = temp;
                                temp = temp.FirstChild;//paso a los hijos tareas(entregables)
                                for (int m = 0; m < tempAnt.ChildNodes.Count && !encontrado; m++)
                                {
                                    if (temp.Attributes["Id"].Value.Equals(idEntregableViejo))
                                    {
                                        temp.Attributes["Id"].Value = idEntregableNuevo;
                                        temp.Attributes["Nombre"].Value = nombre;
                                        temp.Attributes["Fecha_Asignacion"].Value = fecha;
                                        encontrado = true;
                                        if (temp.HasChildNodes)
                                        {
                                            EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto),
                                                Convert.ToInt32(idIteracion), Convert.ToInt32(idActividad), Convert.ToInt32(idTarea), Convert.ToInt32(idEntregableNuevo),1,Convert.ToDateTime(fecha));
                                            bdEstructuracion.ActualizarEntregables(est, Convert.ToInt32(idEntregableViejo));
                                        }


                                    }
                                    else
                                    {
                                        temp = temp.NextSibling;//sgte entregable
                                    }
                                }
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);

    }

    //Modificar tareas
    public void EditarXML(string idProyecto, string idIteracion, string idActividad,
                               string idTareaVieja, string idTareaNueva, string nombre, string fecha)
    {
        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTareaVieja))
                            {
                                temp.Attributes["Id"].Value = idTareaNueva;
                                temp.Attributes["Nombre"].Value = nombre;
                                temp.Attributes["Fecha_Asignacion"].Value = fecha;
                                encontrado = true;
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }
        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion),
                                Convert.ToInt32(idActividad),Convert.ToInt32(idTareaNueva),Convert.ToDateTime(fecha));
        bdEstructuracion.ActualizarTareas(est, Convert.ToInt32(idTareaVieja));
        xml.Save(rutaArchivo);
    }

    //Modificar actividades
    public void EditarXML(string idProyecto, string idIteracion, string idActividadVieja,
                               string idActividadNueva, string nombre, string fecha)
    {
        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividadVieja))
                    {
                        if (temp.HasChildNodes) {
                            EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion),
                               Convert.ToInt32(idActividadNueva), 1, Convert.ToDateTime(fecha));
                            bdEstructuracion.ActualizarActividades(est, Convert.ToInt32(idActividadVieja));
                        }
                        temp.Attributes["Id"].Value = idActividadNueva;
                        temp.Attributes["Nombre"].Value = nombre;
                        encontrado = true;

                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }
        //bdEstructuracion.ActualizarTareas(EstructuracionEnt est = new EstructuracionEnt());
        xml.Save(rutaArchivo);
    }

    //Modificar iteraciones
    public void EditarXML(string idProyecto, string idIteracionVieja, string nombre, string fecha)
    {
        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        int idIt;
        XmlNode temp = proyecto.FirstChild;


        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracionVieja))
            {
                if(temp.HasChildNodes){
                    if(temp.FirstChild.HasChildNodes){
                        idIt = bdEstructuracion.InsertarIteracion(new IteracionEnt(0, nombre));
                        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), idIt, 1, 1, Convert.ToDateTime(fecha));
                        bdEstructuracion.ActualizarActividades(est, Convert.ToInt32(idIteracionVieja));
                    }
                }
                temp.Attributes["Nombre"].Value = nombre;
                bdEstructuracion.ActualizarIteracion(Convert.ToInt32(idIteracionVieja),nombre);
                encontrado = true;
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);
    }


    //--------------ELIMINAR-----------------------------------------------------------

    //Eliminar empleado
    public void EliminarElemXMLEmp(string idProyecto, string idIteracion, string idActividad,
                               string idTarea, string idEntregable)
    {
      
        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                tempAnt = temp;
                                temp = temp.FirstChild;//paso a los hijos tareas(entregables)
                                for (int m = 0; m < tempAnt.ChildNodes.Count && !encontrado; m++)
                                {
                                    if (temp.Attributes["Id"].Value.Equals(idEntregable))
                                    {
                                        encontrado = true;
                                        temp.Attributes["Temporal"].Value = "1";//el entregable se vuelve temporal
                                        temp.RemoveChild(temp.FirstChild);//elimino al empleado
                                    }
                                    else
                                    {
                                        temp = temp.NextSibling;//sgte entregable
                                    }
                                }
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);

        //llamar al metodo que guarda una tupla de estructuracion2
        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion), Convert.ToInt32(idActividad),
            Convert.ToInt32(idTarea), Convert.ToInt32(idEntregable),1);
        bdEstructuracion.EliminarEstructuracion2(est);
    
    }

    //Eliminar entregable
    public void EliminarElemXML(string idProyecto, string idIteracion, string idActividad,
                               string idTarea, string idEntregable)
    {

        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                tempAnt = temp;
                                temp = temp.FirstChild;//paso a los hijos tareas(entregables)
                                for (int m = 0; m < tempAnt.ChildNodes.Count && !encontrado; m++)
                                {
                                    if (temp.Attributes["Id"].Value.Equals(idEntregable))
                                    {
                                        encontrado = true;
                                        tempAnt.RemoveChild(temp);//elimino al entregable
                                    }
                                    else
                                    {
                                        temp = temp.NextSibling;//sgte entregable
                                    }
                                }
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);
    }

    //eliminar una tarea
    public void EliminarElemXML(string idProyecto, string idIteracion, string idActividad,
                               string idTarea)
    {

        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        tempAnt = temp;
                        temp = temp.FirstChild;//paso a los hijos actividades (tareas)
                        for (int k = 0; k < tempAnt.ChildNodes.Count && !encontrado; k++)
                        {
                            if (temp.Attributes["Id"].Value.Equals(idTarea))
                            {
                                encontrado = true;
                                tempAnt.RemoveChild(temp);//elimino a la tarea
                                if(tempAnt.ChildNodes.Count==0)
                                {
                                    tempAnt.Attributes["Temporal"].Value = "1";
                                }
                            }
                            else
                            {
                                temp = temp.NextSibling;//sgte tarea
                            }
                        }
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }//
        }

        xml.Save(rutaArchivo);

        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion), Convert.ToInt32(idActividad),
            Convert.ToInt32(idTarea));
        bdEstructuracion.EliminarEstructuracion1(est);
    }

    //eliminar actividad
    public void EliminarElemXML(string idProyecto, string idIteracion, string idActividad)
    {

        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;
        XmlNode tempAnt;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                tempAnt = temp;
                temp = temp.FirstChild;//paso a los hijos de iteraciones(actividades)
                for (int j = 0; j < tempAnt.ChildNodes.Count && !encontrado; j++)
                {
                    if (temp.Attributes["Id"].Value.Equals(idActividad))
                    {
                        encontrado = true;
                        tempAnt.RemoveChild(temp);//elimino a la actividad
                    }
                    else
                    {
                        temp = temp.NextSibling;//sgte actividad
                    }
                }
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }
        }

        xml.Save(rutaArchivo);
        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion),
                                Convert.ToInt32(idActividad), 1);
        bdEstructuracion.EliminarEstructuracionAct(est);

    }

    //eliminar iteracion
    public void EliminarElemXML(string idProyecto, string idIteracion)
    {

        XmlNode proyecto = xml.DocumentElement;

        bool encontrado = false;
        XmlNode temp = proyecto.FirstChild;

        for (int i = 0; i < proyecto.ChildNodes.Count && !encontrado; i++)
        {
            if (temp.Attributes["Id"].Value.Equals(idIteracion))
            {
                encontrado = true;
                proyecto.RemoveChild(temp);//elimino al iteracion
            }
            else
            {
                temp = temp.NextSibling;//sgte iteracion
            }
        }

        xml.Save(rutaArchivo);

        EstructuracionEnt est = new EstructuracionEnt(Convert.ToInt32(idProyecto), Convert.ToInt32(idIteracion),
                                1, 1);
        bdEstructuracion.EliminarEstructuracionIt(est);

    }

}
